home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk1 / files / newwildcmp.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  1KB  |  75 lines

  1.  
  2. /*
  3.  *  NEWWILDCMP.C
  4.  *
  5.  *  (c)Copyright 1987 Matthew Dillon, All Rights Reserved.
  6.  *
  7.  *  Compare a wild card name with a normal name
  8.  *
  9.  *  This function replaces wildcmp() in SUP32.LIB (as not everybody will
  10.  *  have the latest SUP32.LIB).  The only difference is that this call
  11.  *  is case insensitive.  Later releases of SUP32.LIB will fix the
  12.  *  case-sensitive bug.
  13.  */
  14.  
  15. #define MAXB   8
  16.  
  17. newwildcmp(wild, name)
  18. char *wild, *name;
  19. {
  20.     register char *w = wild;
  21.     register char *n = name;
  22.     char *back[MAXB][2];
  23.     register short bi = 0;
  24.     register char c1, c2;
  25.  
  26.     while (*n || *w) {
  27.     switch (*w) {
  28.     case '*':
  29.         if (bi == MAXB) {
  30.         puts ("Too many levels of '*'");
  31.         return (0);
  32.         }
  33.         back[bi][0] = w;
  34.         back[bi][1] = n;
  35.         ++bi;
  36.         ++w;
  37.         continue;
  38. goback:
  39.         --bi;
  40.         while (bi >= 0 && *back[bi][1] == '\0')
  41.         --bi;
  42.         if (bi < 0)
  43.         return (0);
  44.         w = back[bi][0] + 1;
  45.         n = ++back[bi][1];
  46.         ++bi;
  47.         continue;
  48.     case '?':
  49.         if (!*n) {
  50.         if (bi)
  51.             goto goback;
  52.         return (0);
  53.         }
  54.         break;
  55.     default:
  56.         c1 = *n;
  57.         c2 = *w;
  58.         if (c1 >= 'A' && c1 <= 'Z')     /*  to lower case */
  59.         c1 |= 0x20;
  60.         if (c2 >= 'A' && c2 <= 'Z')
  61.         c2 |= 0x20;
  62.         if (c1 != c2) {
  63.         if (bi)
  64.             goto goback;
  65.         return (0);
  66.         }
  67.         break;
  68.     }
  69.     if (*n)  ++n;
  70.     if (*w)  ++w;
  71.     }
  72.     return (1);
  73. }
  74.  
  75.